﻿using System.ServiceModel;
using ActionService.Messages;

namespace ActionService.ServiceContracts
{
    /// <summary>
    /// IService is the interface for Patterns in Action public services.
    /// </summary>
    /// <remarks>
    /// Application Facade Pattern.
    /// </remarks>
    [ServiceContract(SessionMode = SessionMode.Required)]
    public interface IActionService
    {

        [OperationContract]
        TokenResponse GetToken(TokenRequest request);

        [OperationContract]
        LoginResponse Login(LoginRequest request);

        [OperationContract]
        LogoutResponse Logout(LogoutRequest request);

        [OperationContract]
        CartResponse GetCart(CartRequest request);

        [OperationContract]
        CartResponse SetCart(CartRequest request);

        [OperationContract]
        CountryResponse GetCountries(CountryRequest request);

        [OperationContract]
        CountryResponse SetCountries(CountryRequest request);


        [OperationContract]
        CustomerResponse GetCustomers(CustomerRequest request);

        [OperationContract]
        CustomerResponse SetCustomers(CustomerRequest request);

        [OperationContract]
        EmployeeResponse GetEmployees(EmployeeRequest request);

        [OperationContract]
        EmployeeResponse SetEmployees(EmployeeRequest request);

        [OperationContract]
        OrderResponse GetOrders(OrderRequest request);

        [OperationContract]
        OrderResponse SetOrders(OrderRequest request);

        [OperationContract]
        OrderDetailResponse GetOrderDetails(OrderDetailRequest request);

        [OperationContract]
        OrderDetailResponse SetOrderDetails(OrderDetailRequest request);

        [OperationContract]
        PointResponse GetPoints(PointRequest request);

        [OperationContract]
        PointResponse SetPoints(PointRequest request);

        [OperationContract]
        ProductResponse GetProducts(ProductRequest request);

        [OperationContract]
        ProductResponse SetProducts(ProductRequest request);

        [OperationContract]
        ProvinceResponse GetProvinces(ProvinceRequest request);

        [OperationContract]
        ProvinceResponse SetProvinces(ProvinceRequest request);

        [OperationContract]
        ServiceResponse GetServices(ServiceRequest request);

        [OperationContract]
        ServiceResponse SetServices(ServiceRequest request);

        [OperationContract]
        SupplierResponse GetSuppliers(SupplierRequest request);

        [OperationContract]
        SupplierResponse SetSuppliers(SupplierRequest request);

        [OperationContract]
        TrafficResponse GetTraffics(TrafficRequest request);

        [OperationContract]
        TrafficResponse SetTraffics(TrafficRequest request);

        [OperationContract]
        TrafficTypeResponse GetTrafficTypes(TrafficTypeRequest request);

        [OperationContract]
        TrafficTypeResponse SetTrafficTypes(TrafficTypeRequest request);

        [OperationContract]
        CategoryResponse SetCategories(CategoryRequest request);

        [OperationContract]
        CategoryResponse GetCategories(CategoryRequest request);
    }
}